<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
//"use strict"   // 严格模式: es5新增的
/*
使用new的方式来调用函数的时候, 这个时候, 这样的函数就叫构造函数
作为构造函数使用:
    1. 首先创建一个对象, 这个对象的类型就是构造函数的名字
    
    2. 最后会把创建这个对象自动的返回

在构造函数中, this就是指代创建这个对象
 */
function Person(name, age, sex){
    console.log(this);
    //给创建的对象初始化
    this.name = name;
    this.age = age;
    this.sex = sex;
    this.speak = function (){
        console.log(this.name, this.age);
    }
}

var p1 = new Person("李四", 20, "男");
var p2 = new Person("志玲", 40, "女");

console.log(p1);
console.log(p2);
p1.speak();
p2.speak();
//Person()   // 如果直接调用一个函数, 在非严格模式下则函数中的this指代window对象

/*console.log(typeof p1);
// p1是Person的实例(对象) Person是p1的类型
console.log(p1 instanceof Person);*/
</script>
</body>
</html>
<!--

函数的三要素:
 1. 函数名    自证
 
 2. 函数的参数
 
 3. 函数的返回值

构造函数: constructor
    用来创建对象
-->